package com.xbai.spark.core.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  * coalesce(numPartitions) 算子
  * 作用：缩减分区数，用于大数据集过滤后，提高小数据集的执行效率。
  * coalesce重新分区，可以选择是否进行shuffle过程。由参数shuffle: Boolean = false/true 决定。
  * 案例：创建一个4个分区的RDD，对其缩减分区
  *
  * @author xbai
  * @Date 2020/12/30
  */
object Spark11_Coalesce {

  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("coalesce")
    val sc = new SparkContext(conf)

    val listRDD: RDD[Int] = sc.makeRDD(1 to 16, 4)
    println("缩减分区前 = " + listRDD.partitions.length)
    val coalesceRDD: RDD[Int] = listRDD.coalesce(2)
    coalesceRDD.collect().foreach(println)
    println("缩减分区后 = " + coalesceRDD.partitions.length)
  }
}
